import axios from './axios'
import obj from './api'
import { getCookie } from '@/utils/cookie'
var { user, types, banner, video, cart, address } = obj

//要轮播图
export function getBanner() {
    return axios.get(banner)
}

// 不带商品的分类
export function getTypes() {
    return axios.get(types).then(data => {
        //将商品删掉后返回数据
        var types = data.map(type => {
            delete type.products
            return type
        })
        return new Promise(function (reslove, reject) {
            reslove(types)
        })
    })
}

// 携带商品的分类
export function getTP() {
    return axios.get(types)
    
}

// 只要商品
export function getPro(typename) {
    return axios.get(types).then(data => {
        if (typename === '全部') {
            var arr = []
            data.forEach(type => {
                arr = arr.concat(type.products)
            })
            // console.log(111,arr)
        }
        else {
            var arr = data.find(type => type.name === typename).products
        }
        return new Promise(reslove => reslove(arr))
    })
}

//请求视频
export function getVideos() {
    return axios.get(video)
}

//注册请求
export function register(params) {
    return axios.get(user).then(data => {
        //data查询出来的是所有账号组成的数组，数组元素是对象

        var index = data.findIndex(item => item.username === params.username)
        if (index < 0) {
            //表示当前注册的账号没有重复
            return axios.post(user, params).then(data => {
                return new Promise(reslove => reslove({
                    code: 0,
                    msg: '注册成功',
                }))
            })
        } else {
            return new Promise(reslove => reslove({
                code: 1,
                msg: '账号被占用'
            }))
        }

    })
}

//登录请求
export function login(params) {
    return axios.get(user).then(users => {
        var index = users.findIndex(item => item.username === params.username &&
            item.password === params.password)
        if (index < 0) {
            var responseObj = {
                code: 0,
                msg: '账号或密码错误',
            }
        } else {
            var responseObj = {
                code: 1,
                msg: '登录成功',
                data: {
                    username: users[index].username,
                    nickname: users[index].nickname,
                },
            }
        }
        return new Promise(resolve => resolve(responseObj))
    })
}

// 定义一个加入购物车的函数
export function addCart(product) {
    return axios.get(cart).then(carts => {
        // 查找，该商品是否已经加入过购物车
        var cartPro = carts.find(item => item.pid === product.pid && item.username === product.username)
        if (cartPro) {
            cartPro.number++
            return axios.put(cart + '/' + cartPro.id, cartPro).then(data => {
                return new Promise(resolve => resolve({
                    code: 1,
                    msg: '添加成功',
                }))
            })
        } else {
            // 如果购物车没有该商品，使用post增加
            return axios.post(cart, product).then(data => {
                return new Promise(resolve => resolve({
                    code: 1,
                    msg: '添加成功',
                }))
            })
        }
    })
}

//获取购物车数据
export function getCartsPro() {
    return axios.get(cart).then(data => {
        //这里的data是获取出的所有数据，通过cookie保存的username筛选
        var username = getCookie('username')
        data = data.filter(item => item.username === username)
        return new Promise(resolve => resolve(data))
    })
}

//封装数量修改的函数
export function editCart(params) {
    return axios.put(cart + '/' + params.id, params).then(data => {
        return new Promise(resolve => resolve({
            code: 1,
            msg: '数量修改成功'
        }))
    })
}

//封装删除数据的请求操作
export function delCart(id) {
    return axios.delete(cart + '/' + id).then(data => {
        return new Promise(resolve => resolve({
            code: 1,
            msg: '购物车商品删除成功！'
        }))
    })
}

//保存用户填入的地址
export function saveAddr(params) {
    var username = getCookie('username')
    //如果params中有id这个对象，表示这是存储了的数据，此次是修改地址而不是保存地址
    if (params.id) {
        //判断将要修改的地址是默认地址还是非默认地址
        if (params.isDefault) {
            return axios.get(address).then(data => {
                data = data.filter(item => item.username === username)
                //查找，当前用户是否有默认地址
                var defaultAddr = data.find(item => item.isDefault)
                //如果原地址中存在默认地址
                if (defaultAddr) {
                    defaultAddr.isDefault = false
                    return axios.put(address + '/' + defaultAddr.id, defaultAddr).then(data => {
                        //取消了上一个的默认，再将将要修改的数据发送修改请求
                        return axios.put(address + '/' + params.id, params).then(data => {
                            return new Promise(resolve => resolve({
                                code: 1,
                                msg: '地址修改成功'
                            }))
                        })
                    })
                } else {//存储的地址中没有默认地址时
                    return axios.put(address + '/' + params.id, params).then(data => {
                        return new Promise(resolve => resolve({
                            code: 1,
                            msg: '地址修改成功'
                        }))
                    })
                }
            })
        }
        //将要修改的地址不是默认地址时
        else {//直接更改
            return axios.put(address + '/' + params.id, params).then(data => {
                return new Promise(resolve => resolve({
                    code: 1,
                    msg: '地址修改成功'
                }))
            })
        }
    }

    //这里是保存地址，不是编辑地址
    else {
        //如果要保存的地址是默认地址
        if (params.isDefault) {
            return axios.get(address).then(data => {
                data = data.filter(item => item.username === username)
                //从当前用户的地址中找出默认地址
                var defaultAddr = data.find(item => item.isDefault)

                //判断是否找到默认地址
                if (defaultAddr) {
                    defaultAddr.isDefault = false
                    return axios.put(address + '/' + defaultAddr.id, defaultAddr).then(data => {
                        //删除掉默认地址后，再添加新的地址
                        return axios.post(address, params).then(data => {
                            return new Promise(resolve => resolve({
                                code: 1,
                                msg: '地址保存成功'
                            }))
                        })
                    })
                }
                //没有存储默认地址时
                else {
                    return axios.post(address, params).then(data => {
                        return new Promise(resolve => resolve({
                            code: 1,
                            msg: '地址保存成功'
                        }))
                    })
                }
            })
        }
        //保存的地址不是默认地址
        else {
            return axios.post(address, params).then(data => {
                return new Promise(resolve => resolve({
                    code: 1,
                    msg: '地址保存成功'
                }))
            })
        }
    }


}

//获取已经保存的地址
export function getAddrs() {
    return axios.get(address).then(data => {
        var username = getCookie('username')
        data = data.filter(item => item.username === username)
        return new Promise(resolve => resolve({
            code: 1,
            msg: '地址请求成功',
            data: data
        }))
    })
}

//删除地址的函数
export function delAddr(id) {
    return axios.delete(address + '/' + id).then(data => {
        return new Promise(resolve => resolve({
            code: 1,
            msg: '地址删除成功'
        }))
    })
}

//获取默认地址
export function getDefaultAddr() {
    return axios.get(address).then(data => {
        var username = getCookie('username')
        data = data.filter(item => item.username === username)

        //判断当前用户是否有地址
        if (data.length) {
            var defaultAddr = data.find(item => item.isDefault)
            //如果用户拥有默认地址
            if (defaultAddr) {
                return new Promise(resolve => resolve({
                    code: 1,
                    msg: '默认地址获取成功',
                    data: defaultAddr
                }))
            } else {
                return new Promise(resolve => resolve({
                    code: 1,
                    msg: '默认地址获取成功',
                    data: data[0]
                }))
            }
        }
        //用户还没有地址
        else {
            return new Promise(resolve => resolve({
                code: 1,
                msg: '用户暂未添加地址',
                data: null
            }))
        }
    })
}
// 批量删除被选中的商品
export function removeChecked(params) {
    // 将数组中所有商品的id组成一个数组
    var ids = params.map(item => item.id) // [1,2,3]
    // 我们需求的是发送多次异步请求，然后所有异步请求都完成后，再给调用返回
    // Promise有方法叫all，是一次性执行多个promise，当所有的promise都成功的时候，才会返回
    // 先定义一个数组，准备存放要执行的多个promise
    var arr = []
    // 遍历ids
    ids.forEach(item => {
        arr.push(new Promise(resolve => {
            axios.delete(cart + '/' + item).then(data => {
                resolve({
                    code: 1,
                    msg: '删除一个'
                })
            })
        }))
    })
    return Promise.all(arr).then(data => {
        if(data.length === arr.length) {
            return new Promise(resolve => resolve({
                code: 111,
                msg: '全部删除成功'
            }))
        } else {
            return new Promise(resolve => resolve({
                code: 222,
                msg: '删除失败'
            }))
        }
        
    })
}